from dao.DAOQuanLyNhanVien import DaoQuanLyNhanVien
from datetime import datetime
from google.appengine.api import users
from models.NhanVien import NhanVien
from utils.permission_required import permission_required
import WSGI
import json as simplejson
import logging
import math
import webapp2

logger = logging.getLogger("GUIQuanLyNhanVien")

class GuiQuanLyNhanVien(webapp2.RequestHandler):
    
    perm = 'QuanLy.QuanLyNhanVien'
    priv = ''
    @permission_required
    def get(self):
        cbbLoaiNV = DaoQuanLyNhanVien.getListLoaiNhanVien()
        if self.priv == 'Owner':
            cbbTenNV, _ = DaoQuanLyNhanVien.getListNhanVien('', '', 1000, 0, '')
        else:
            user = users.get_current_user()
            nhanVien = DaoQuanLyNhanVien.getNhanVienByUsername(user.nickname())
            cbbTenNV, _ = DaoQuanLyNhanVien.getListNhanVien('', '', 1000, 0, nhanVien.key().id())
        
        #used for jqgrid
        lstLoaiNVText = ''
        for item in cbbLoaiNV:
            lstLoaiNVText += str(item['id']) + ':' + item['tenLoaiNV'] + ';'
        lstLoaiNVText = lstLoaiNVText[:-1]
        
        #used for jqgrid
        lstNV = ''
        for item in cbbTenNV:
            lstNV += str(item['id']) + ':' + item['tenNV'] + ';'
        lstNV = lstNV[:-1]
        
        #used for menu
        nv = DaoQuanLyNhanVien.getNhanVienByUsername(users.get_current_user().nickname())
        lstPerm = DaoQuanLyNhanVien.getListStaffPriviledge(nv.key().id())
        lstMenu = []
        lstNewPerm = []
        for perm in lstPerm:
            lstMenu.append(perm[:perm.index('.')])
            lstNewPerm.append(perm.replace('.', '-'))
        lstMenu = list(set(lstMenu))
        
        template_values = {
                        'lstPerm': lstNewPerm,
                        'lstMenu': lstMenu,
                        'cbbLoaiNV': cbbLoaiNV,
                        'lstLoaiNVText': lstLoaiNVText,
                        'cbbTenNV': cbbTenNV,
                        'nickname': users.get_current_user().nickname(),
                        'signOutUrl': users.create_logout_url(self.request.uri),
                        'lstNV': lstNV
        }

        template = WSGI.jinja_environment.get_template('/html/QuanLyNhanVien.html')
        self.response.out.write(template.render(template_values))


class JsonRequestHandler(webapp2.RequestHandler):
    perm = 'QuanLy.QuanLyNhanVien'
    priv = ''
    @permission_required
    def get(self):
        funcName = self.request.get('func')
        funcMapping = {'getListNhanVien': 'getListNhanVien',
                       'updateNhanVien': 'updateNhanVien'}
        func = getattr(self, funcMapping[funcName]);
        result = func();
        self.response.out.write(result)
    
    def post(self):
        return self.get()
    
    def getListNhanVien(self):
        gridRowNum = int(self.request.get('rows'))
        pageNum = int(self.request.get('page'))
        tenNV = self.request.get('tenNV')
        loaiNV = self.request.get('loaiNV')
        
        user = users.get_current_user()
        nhanVien = DaoQuanLyNhanVien.getNhanVienByUsername(user.nickname())
        
        if self.priv == 'Owner':
            nvId = ''
        else:
            nvId = nhanVien.key().id()
        
        rows, rowNum = DaoQuanLyNhanVien.getListNhanVien(tenNV, loaiNV, gridRowNum, int((pageNum-1)*gridRowNum), nvId)
        for row in rows:
            if row['parentName'] != None:
                row['parentId'] = str(row['parentId']) + ' - ' + row['parentName']
        results = {'page': pageNum, 'total': math.ceil(float(rowNum)/gridRowNum), 'records':rowNum, 'rows':rows}
        return simplejson.dumps(results)
    
    def updateNhanVien(self):
        maNV = self.request.get('id')
        if maNV != '_empty':
            nhanVien = NhanVien.get_by_id(int(maNV))
            if nhanVien.tenNV != self.request.get('tenNV'):
                DaoQuanLyNhanVien.updateTenNhanVien(maNV, self.request.get('tenNV'))
        else:
            nhanVien = NhanVien()
        oper = self.request.get('oper')
        logger.debug(oper)
        if oper == 'del':
            DaoQuanLyNhanVien.deleteNhanVien(nhanVien)
            return 1
        else:
            nhanVien.tenNV = self.request.get('tenNV')
            if self.request.get('ngaySinh') != '':
                nhanVien.ngaySinh = datetime.strptime(self.request.get('ngaySinh'), '%d/%m/%Y')
            nhanVien.soCMND = self.request.get('soCMND')
            if self.request.get('ngayCap') != '':
                nhanVien.ngayCap = datetime.strptime(self.request.get('ngayCap'), '%d/%m/%Y')
            nhanVien.noiCap = self.request.get('noiCap')
            nhanVien.dienThoai = self.request.get('dienThoai')
            nhanVien.diaChi = self.request.get('diaChi')
            nhanVien.loaiNV = int(self.request.get('tenLoaiNV'))
            lnv = DaoQuanLyNhanVien.getLoaiNhanVienById(nhanVien.loaiNV)
            nhanVien.tenLoaiNV = lnv.tenLoaiNV
            nhanVien.codeLoaiNV = lnv.codeLoaiNV
            nhanVien.username =  self.request.get('username').lower()
            nhanVien.email = self.request.get('email')
            
            if self.request.get('luongCoBan') != '':
                nhanVien.luongCoBan = long(self.request.get('luongCoBan'))
            if self.request.get('thuongDatMuc') != '':
                nhanVien.thuongDatMuc = long(self.request.get('thuongDatMuc'))
            if self.request.get('parentId') != '':
                nhanVien.parentId = int(self.request.get('parentId'))
                nhanVien.parentName = DaoQuanLyNhanVien.getNhanVienById(nhanVien.parentId).tenNV
            
            DaoQuanLyNhanVien.createOrUpdateNhanVien(nhanVien)
            return 1
        
        
            
        